package com.qf.web;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.qf.entity.RoleEntity;
import com.qf.pojo.AuthPojo;
import com.qf.pojo.RolePojo;
import com.qf.service.IAuthService;
import com.qf.service.IRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

@Controller
public class RoleController {

    @Autowired
    IRoleService roleService;

    @Autowired
    IAuthService authService;

    @RequestMapping("/rolelist")
    public String adminList(RoleEntity re, HttpServletRequest request){

        //设置当前页,和每页显示的记录数
        PageHelper.startPage(re.getPageNum(),re.getPageSize());

        //查询所有管理员
        List<RolePojo> list = roleService.queryRoles(re);

        PageInfo<RolePojo> pageInfo = new PageInfo<RolePojo>(list);
        //返回到前台
        request.setAttribute("pageInfo",pageInfo);

        request.setAttribute("re",re);
        return "rolelist";

    }
    @RequestMapping("addRole")
    public String addRole(RoleEntity re){

        boolean result = roleService.addRole(re);

        return "success";
    }

    @RequestMapping("jumpRole")
    public String jumpRole(){
        return "roleadd";
    }


    //编辑用户
    //role_has_auths:编辑角色前,用户所拥有的权限
    //strs : 编辑角色,现在有的权限
    @RequestMapping("editRole")
    public String editRole(RoleEntity re,String[] role_has_auths){

        boolean result = roleService.editRole(re); //把工作量交给数据库

        //并发 : 同时N个人操作一个函数
        //最大访问量; 100w
        //最高并发数; 针对于功能的
        //网站同时在线人数
        //网站的用户数

//        String[] strs = re.getAuths(); //当前用户的角色
//
//        //如果两个字符串一致,没有修改权限;
//        strs.equals(role_has_auths);
//
//        //1: 有新增的
//        Set<String> addSet = StringUtil.pramNoContain(strs,role_has_auths);
//
//        //2: 有删除的
//        Set<String> delSet = StringUtil.pramNoContain(role_has_auths, strs);
//
//        //调用解绑以及新增的方法就可以了;
//        xxx

        //怎么样对权限管理(应用);

        return "success";
    }

    /**
     * 打开编辑角色页面
     * @param rid
     * @return
     */
    @RequestMapping("jumpRoleEdit")
    public String editRole(int rid, HttpServletRequest request){

        //1: 当前角色的信息;
        RolePojo rp = roleService.queryRoleById(rid);

        //2: 当前角色的权限信息;
        List<AuthPojo> role_auths = rp.getAuths();

        //3: 查询所有的权限
        List<AuthPojo> auths = authService.queryAuths();

        //保存当前用户已有的权限  "1,2,3,4,5,6,"
        StringBuilder sb = new StringBuilder();

        //确定当前角色有哪些权限,然后勾选
        for(AuthPojo auth : auths){ //所有的权限

            for(AuthPojo au : role_auths){ //用户拥有的权限

                if(auth.getAuid() == au.getAuid()){ //说明用户有这个权限

                    sb.append(auth.getAuid()).append(",");

                    auth.setChecked(true);
                    break;
                }

            }

        }


        //1:使用工具类转成json串
        ObjectMapper om = new ObjectMapper();
        try {
            String str = om.writeValueAsString(auths);
            request.setAttribute("str",str);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        request.setAttribute("role_has_auths",sb.substring(0,sb.length()-1));
        request.setAttribute("role",rp);
        request.setAttribute("auths",auths);
        return "roleedit";
    }

}
